[レポート] マイクロサービスはコンテナで実現する?それともサーバーレスで実現する? #reinvent #ARC214
はじめに
本記事は「Using Containers and Serverless to Deploy Microservices」のレポートです。
セッション概要
Microservices are a great way to segment your application into well-defined, self-contained units of functionality. Come join us in this chalk talk as we discuss two common architectures for deploying microservices: containers and serverless. Please join us for a speaker meet-and-greet following this session at the Speaker Lounge (ARIA East, Level 1, Willow Lounge). The meet-and-greet starts 15 minutes after the session and runs for half an hour.
レポート
ゴール
- コンテナ、サーバレス、それぞれのアーキテクチャのメリット、トレードオフを理解する
- AWS上でコンテナ、サーバーレスを動かす場合の選択肢を理解する
- コンテナ、サーバレスアーキテクチャーの考慮すべきポイントを理解する
- 一般的な使用事例とアプローチをレビューする
アジェンダ
- AWS上でのコンテナ、サーバレスのそれぞれの選択肢
- コンテナとサーバレス、アーキテクチャの選択
- マイクロサービスアーキテクチャを実現するためにAWSで利用できるサービス
AWS上でのコンテナ、サーバレスのそれぞれの選択肢
マイクロサービスの選択
- コンテナ
- Amazon ECS
- Amazon EKS
- Amazon Fargate
- サーバーレス
- Lambda
ECS、EKS、Fargate
- AWSでコンテナ化アプリケーションを実行するためのプラットフォーム
- ニーズに合わせてアプリケーションを簡単に実行し拡張可能
- 他のAWSサービスとのネイティブ統合
- CI/CDサービスとの連携
コンテナを利用したアーキテクチャの例
- パブリックなセグメントに配置したELBを経由してECSクラスタにアクセスする
- ECSクラスタはオートスケーリンググループによりリソースを自動で拡張
- 必要に応じてECSクラスタから別のサービスを実行
コンテナ実行環境の役割
- ECS、EKS
- コントロールプレーン
- コンテナの管理を行う(死活監視、デプロイなど)
- EC2、Fargate
- データプレーン
- コンテナが実行される環境、各状態をコントロールプレーンにフィードバック
※BlackBeltの資料になりますが、こちらがわかりやすいです。
Serverless:Lambda
- サーバーのことを考えずにコードを実行するプラットフォーム
- プロビジョニングまたは管理するサーバーがない
- 使い方のスケール
- アイドル費用は発生しない
- 高可用性が組み込まれ、フォールトトレランスが容易
- 他のAWSサービスとのネイティブ統合
- イベントドリブンフレームワーク
- 複数の呼び出しモデル
Lambdaを利用したアーキテクチャの例
- APIGateway(ユーザーからのリクエストを受け付ける、必要なリクエストを抽出しLambdaを実行する)
- Lambda(メインの処理を実行する、必要に応じてデータストアであるDynamoDBを利用する)
- DynamoDB(Lambdaから呼び出されるデータストア)
それぞれのアーキテクチャに関する考察
- コンテナ
- 自身が用意した環境で好きなコードをビルドすることができる
- 選択肢が多い
- 管理とオーケストレーションが必要
- 複数のネットワークモード、成熟したツールを利用することが可能
- サーバーレス
- 標準化された選択肢
- スケーラブルなプラットフォームを駆動する
- セキュリティとスケーリングがAWSに管理される
- コンテナが不要
- 必要なリソースを選択(128M to 3G)
- ツールの開発
- 組織の準備
アーキテクチャの選択
コンテナが適しているケース
- 低起動待ち時間
- 15分以上の処理実行
- 予測可能な高いトラフィック使用量
- 計算環境の完全な制御
サーバーレスが適しているケース
- イベントドリブンなアクション
- 予測不可能なトラフィックを処理する能力
- 早くビジネス価値を提供する
- 運用上の複雑さをAWSに任せる
決めることができない場合
両方のアーキテクチャを採用することも検討する
マイクロサービスアーキテクチャの実現に利用できるAWSのサービス
API Gateway
- 分散システムのベストプラクティスを可能にする
- スロットリング
- 指数的なフォールバックで再試行
- フェイルファースト
- PrivateやPublicサービスのサポート
AWS AppSync
- データ駆動のリアルタイムアプリケーションを可能にする
- 複数のデータソース、1つのエンドポイント
- クライアントがペイロードを指定する
- 最新データをサブスクリプション
X Ray
- 分散アプリケーションの洞察を提供
- アプリケーションの問題を明らかにする
- アプリケーションのパフォーマンスを向上させる
- ECS、Lambdaなどに対応
To Learn more
さいごに
コンテナ、サーバレス、それぞれのアーキテクチャ特性を見極め、最適なシステムを構築していきたいですね。